// 抽象工厂
// 普通工厂没有遵守开放封闭原则（对拓展开放，对修改封闭）


// 手机工厂抽象类
class MobilePhoneFactory {
  // 提供操作系统的接口
  createOS () {
    throw new Error('抽象工厂方法不允许直接调用！必须重写')
  }

  // 提供硬件的接口
  createHardWare () {
    throw new Error('抽象工厂方法不允许直接调用！必须重写')
  }
}


class wnStartFactory extends MobilePhoneFactory{
  createOS(){
    return new Andriod()
  }
  createHardWare(){
    return new MTK()
  }
}


// 操作系统抽象类
class OS{
  controlHardWare(){
    throw new Error('抽象工厂方法不允许直接调用！必须重写')
  }
}


class AndriodOS extends OS{
  controlHardWare(){
    console.log("I'm using AndroidOS's ways to control HardWare");
  }
}
class HarmonyOS extends OS{
  controlHardWare(){
    console.log("I'm using HarmonyOS's ways to control HardWare");
  }
}


class HardWare{
  operateByOrder(){
    return new Error('抽象工厂方法不允许直接调用！必须重写')
  }
}
